home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 003 / cliptips.arc / CLIPTIPS.TXT < prev   
Encoding:
Text File  |  1987-01-10  |  48.5 KB  |  1,584 lines

  1.  Work-around:
  2.     At the D: prompt invoke CLIPPER with the following syntax:
  3.       CLIPPER filename #DF=C:
  4.  
  5.  
  6.  
  7. PUBLISHED:  16 Dec 1986
  8. MAIN_TOPICS:  AUTUMN RESERVED WORDS
  9. TEXT:
  10.  
  11.  The following list of RESERVED WORDS is for the AUTUMN '86 version
  12.  of CLIPPER.
  13.  
  14.      ALLMEM                ATOF                   AUTUMN86
  15.      BLDMEM                CHGFC                  CHKUFB
  16.      CXA55                 CXA_55                 CXC33
  17.      CXC55                 CXC88                  CXC_55
  18.      CXD22                 CXD33                  CXD55
  19.      CXDVT                 CXD_55                 CXFDIV
  20.      CXFERR                CXFMUL                 CXFNM5
  21.      CXFNM5A               CXFXT5                 CXFXT5A
  22.      CXINIT                CXLSH                  CXM22
  23.      CXM33                 CXM55                  CXMAT
  24.      CXMVT                 CXM_55                 CXN5
  25.      CXNDP0                CXNDP1                 CXNDP2
  26.      CXNDP3                CXNDPH                 CXNDPL
  27.      CXNDPX                CXNM8                  CXRSH
  28.      CXS55                 CXSERR                 CXSERZ
  29.      CXS_55                CXT5                   CXV25
  30.      CXV35                 CXV50                  CXV51
  31.      CXV53                 CXVDF                  CXVFD
  32.      DCLOSE                DCREAT                 DCREATX
  33.      DOPEN                 DREAD                  DSEEK
  34.      DUNIQUE               DWRITE                 ENVIRON
  35.      ERRNO                 EXCEPT                 EXP
  36.      FABS                  FMOD                   FREXP
  37.      GETFC                 GETMEM                 GETML
  38.      ISSPACE               LDEXP                  LOG
  39.      LOG10                 LSBRK                  LSEEK
  40.      MATHERR               MODF                   MOVMEM
  41.      NETERR                OPEN                   PCNGMN
  42.      POW                   POW2                   RBRK
  43.      READ                  REMOVE                 RENAME
  44.      RLOCK                 RLSMEM                 RLSML
  45.      RSTMEM                RUNLK                  SBRK
  46.      SETMEM                SIZMEM                 SQRT
  47.      STBCPY                STCCPY                 STPBLK
  48.      STPCHR                STPCPY                 STRCAT
  49.      STRCMP                STRCPY                 STRLEN
  50.      STRNCAT               STRNCMP                STRNCPY
  51.      STSCMP                UNLINK                 WRITE
  52.      XCABT
  53.  
  54.  
  55. PUBLISHED:  16 Dec 1986
  56. MAIN_TOPICS:  WINTER RESERVED WORDS
  57. TEXT:
  58.  
  59.  The following list of RESERVED WORDS is for the WINTER'85 version
  60.  of CLIPPER.  As of this version of CLIPPER, words beginning with an
  61.  underscore are not allowed; therefore, they are not included in this
  62.  list.
  63.  
  64.     $STRT$                 ALLMEM                 ATOF
  65.     BDOS                   BLDMEM                 CLOSE
  66.     CREAT                  CXA38                  CXA55
  67.     CXA_55                 CXC33                  CXC55
  68.     CXC88                  CXC_55                 CXD33
  69.     CXD55                  CXD_55                 CXFER
  70.     CXFNM4                 CXFNM5                 CXFXT4
  71.     CXFXT5                 CXM33                  CXM55
  72.     CXM_55                 CXN5                   CXNDPB
  73.     CXNDPH                 CXNDPL                 CXNM8
  74.     CXS55                  CXS88                  CXS_55
  75.     CXT5                   CXV05                  CXV25
  76.     CXV35                  CXV45                  CXV50
  77.     CXV52                  CXV53                  CXV54
  78.     CXV83                  CXVDF                  CXVFD
  79.     CXV_45                 CXV_54                 ERRNO
  80.     EXCEPT                 EXIT                   EXP
  81.     FABS                   FCLOSE                 FMOD
  82.     FOPEN                  FORKL                  FORKLP
  83.     FORKV                  FORKVP                 FREOPEN
  84.     FREXP                  GETENV                 GETMEM
  85.     GETML                  IEXEC                  LDEXP
  86.     LOG                    LOG10                  LSBRK
  87.     LSEEK                  MATHERR                MKEXT
  88.     MKNAME                 MODF                   MOVMEM
  89.     OPEN                   POW                    POW2
  90.     RBRK                   READ                   REMOVE
  91.     RENAME                 RLSMEM                 RLSML
  92.     RSTMEM                 SBRK                   SETMEM
  93.     SIZMEM                 SQRT                   STBCPY
  94.     STCCPY                 STCD_I                 STCIS
  95.     STCISN                 STCI_D                 STCU_D
  96.     STPBLK                 STPCHR                 STPCPY
  97.     STRCAT                 STRCMP                 STRCPY
  98.     STRCSPN                STRLEN                 STRNCAT
  99.     STRNCMP                STRNCPY                STRSPN
  100.     STSCMP                 SYSTEM                 UNLINK
  101.     WAIT                   WINTER85               WRITE
  102.     XCEXIT                 XCOVF
  103.  
  104.  
  105.  
  106.  
  107. PUBLISHED:  16 Dec 1986
  108. MAIN_TOPICS:  FLASHCODE WITH CLIPPER
  109. TEXT:
  110.  A few callers have reported that programs that were linked
  111.  with FLASHCODE were generating 'System error memory fault'.
  112.  This was because of FLCLIP.OBJ.  Call SOFTWARE BOTTLING
  113.  COMPANY to get an upgrade to this program called FWCLIP.OBJ.
  114.  The number is (718)458-3700.
  115.  
  116.  
  117.  
  118. PUBLISHED:  16 Dec 1986
  119. MAIN_TOPICS:  <ESC>
  120. TEXT:
  121.  When <ESC> is hit in a screen of GETs with only one READ,
  122.  CLIPPER will save the contents of the GETs prior to the <ESC>.
  123.  dBASE will not save any of the GETS.
  124.  
  125.  
  126.  
  127. PUBLISHED:  16 Dec 1986
  128. MAIN_TOPICS:  DEBUGGER
  129. TEXT:
  130.  When using the "M" option to list PRIVATE variables, some of the
  131.  variables will display a type @ .  This means that the variable
  132.  is a PARAMETER passed to that procedure.  The @ sign is a
  133.  reference symbol.  Use the "E" option to display the contents
  134.  of the variable.
  135.  
  136.  
  137.  
  138. PUBLISHED:  16 Dec 1986
  139. MAIN_TOPICS:  80287 MATH CHIP
  140. TEXT:
  141.  The 80287 MATH CHIP is not supported as of the WINTER 85
  142.  version of CLIPPER.  This is because the version of LATTICE C
  143.  used does not recognize it.  It IS supported in AUTUMN '86.
  144.  
  145.  
  146.  
  147. PUBLISHED:  16 Dec 1986
  148. MAIN_TOPICS:  TYPE CONFLICT IN +
  149. TEXT:
  150.  A TYPE CONFLICT IN + can occur when using a .FRM file that
  151.  has a Y in the TOTALS? column on a character field.  CLIPPER's
  152.  Report utility will accept a Y in the TOTALS? column.  Also,
  153.  dBASE will keep a Y when changing a field's contents from a
  154.  numeric to a character.
  155.  
  156.  
  157.  
  158. PUBLISHED:  16 Dec 1986
  159. MAIN_TOPICS:  TYPE CONFLICT IN =
  160. TEXT:
  161.  May occur when using a SET KEY TO without a PARAMETERS
  162.  statement in the 'SET KEY - procedure'.  The error usually
  163.  happens on the 11th time that the key is pressed.
  164.  
  165.  
  166.  
  167. PUBLISHED:  16 Dec 1986
  168. MAIN_TOPICS:  TYPE CONFLICT IN ACCUM
  169. TEXT:
  170.  Has occurred when returning from a UDF that has a RETURN
  171.  statement without a returning value.
  172.  
  173.  Example:   FUNCTION funcname
  174.             PARAMETERS a
  175.             --source code--
  176.              RETURN             && no value is retuned
  177.  
  178.  
  179.  
  180. PUBLISHED:  16 Dec 1986
  181. MAIN_TOPICS:  SYSTEM ERROR - STACK UNDERFLOW
  182. TEXT:
  183.  This message indicates that you are doing some type of
  184.  transaction which makes use of more parameters than are
  185.  available.
  186.  
  187.  Examples:
  188.  
  189.   1)  ? chr(n),    && The comma implies another parameter should
  190.       *               be printed resulting in the error.
  191.   2)  DO prog a,b            && Two parameters are being passed to
  192.       --source code---       && prog, but three parameters are
  193.       PROCEDURE prog         && being received.
  194.       PARAMETES a,b,c
  195.  
  196.  
  197.  
  198. PUBLISHED:  16 Dec 1986
  199. MAIN_TOPICS:  SYSTEM ERROR MEMORY FAULT
  200. TEXT:
  201.  Has occurred as a result of a negative constants number after
  202.  compiling.
  203.  
  204.  
  205.  
  206. PUBLISHED:  16 Dec 1986
  207. MAIN_TOPICS:  PROGRAM TOO BIG TO FIT IN MEMORARY
  208. TEXT:
  209.  1) This error can happen when the mother-board is set for 640K
  210.     while the expansion board is set for 256K RAM.
  211.  
  212.  2) Can happen if PLINK86 was incorrecty copied (i.e. bad sector).
  213.  
  214.  
  215.  
  216. PUBLISHED:  16 Dec 1986
  217. MAIN_TOPICS:  INDEX ERROR READ/WRITE
  218. TEXT:
  219.  1) This error can happen when the mother-board is set for 640K
  220.     while the expansion board is set for 256K RAM.
  221.  
  222.  2) Will happen when the disk is full.
  223.  
  224.  
  225.  
  226. PUBLISHED:  16 Dec 1986
  227. MAIN_TOPICS:  INDEX ERROR _NTX SET
  228. TEXT:
  229.  Can happen when REPLACing a field in work area one while in
  230.  work area two.  This is allowed in AUTUMN '86.
  231.  
  232.  Example:
  233.            SELECT 1
  234.            USE file_one
  235.            SELECT 2
  236.            USE file_two
  237.            REPLACE 1->field_name WITH 2->field_name
  238.  
  239.  
  240.  
  241. PUBLISHED:  16 Dec 1986
  242. MAIN_TOPICS:  DOS ERROR 2
  243. TEXT:
  244.     Has occured when trying to RESTORE FROM a .MEM file in a
  245.     program that had a negative constants number after compiling.
  246.     This situation is unique to WINTER '85.
  247.  
  248.  
  249.  
  250. PUBLISHED:  16 Dec 1986
  251.  
  252.  
  253. Screen 14
  254.  
  255. MAIN_TOPICS:  DOS ERROR 0
  256. TEXT:
  257.  DOS ERROR 0 is not a DOS error.  When an internal runtime error
  258.  occurs that CLIPPER cannot identify, it goes out to DOS to
  259.  check as to whether it is a DOS problem.  If it cannot find the
  260.  DOS error ( and its associated number) it assigns a '0' to an
  261.  internal CLIPPER memory variable that is used in our error
  262.  messages.  A DOS ERROR 0 usually occurs when indexing or
  263.  reporting.   This error is unique to WINTER '85.
  264.  The following is a list of possible reasons for this error:
  265.  
  266.    1)  When the constants number after compiling is a negative
  267.        number.
  268.  
  269.    2)  When a program attempts to SET FORMAT TO a format file
  270.        with the same name as the calling program.
  271.  
  272.    3)  When not ending a program with a RETURN while using
  273.        WORDSTAR editor.
  274.  
  275.  
  276. PUBLISHED:  16 Dec 1986
  277. MAIN_TOPICS:  FATAL AT LINE-NUMBER UNEXPECTED EOF
  278. TEXT:
  279.  
  280.  This compiler error can occur when the hard disk runs out of
  281.  disk space while compiling.
  282.  
  283.  
  284.  
  285. PUBLISHED:  16 Dec 1986
  286. MAIN_TOPICS:  CLIPPER -L
  287. TEXT:
  288.  
  289.  When using the "Enhanced Native Code" option '-l', the line
  290.  number passed in the F1 HELP program or a SET KEY TO procedure
  291.  will be erroneous.  The line number will be 4068 which is a
  292.  line in the library.
  293.  Also, the DEBUGGER will not work properly when setting
  294.  breakpoints.
  295.  
  296.  
  297. PUBLISHED:  16 Dec 1986
  298. MAIN_TOPICS:  &&
  299. TEXT:
  300.  
  301.  If a line begins with the double ampersand (&&) used as a comment
  302.  CLIPPER will stop compiling on this line without issuing an error
  303.  message.  This comment should only be used at the end of a command
  304.  line.
  305.  
  306.  
  307. PUBLISHED:  16 Dec 1986
  308. MAIN_TOPICS:  FATAL ERROR 57 - UNDEFINED $OVLYM
  309. TEXT:
  310.  
  311.      Will occur when the "OVERLAY PROG,..." statement is issued
  312.      after a "ENDAREA" statement.
  313.  
  314.  
  315.  
  316. PUBLISHED:  16 Dec 1986
  317. MAIN_TOPICS:  PLINK86
  318. TEXT:
  319.  
  320.  PLINK86 will lose track of the directory that the overlay
  321.  library is in if it is different than the default.  This can be
  322.  resolved by creating an OBJ variable in DOS that contains the
  323.  path of the objs and lib files to be linked.
  324.   Example:  SET OBJ=C:\CLIP\
  325.  
  326.  
  327.  
  328. PUBLISHED:  16 Dec 1986
  329. MAIN_TOPICS:  MS ASSEMBLER LINKER
  330. TEXT:
  331.  
  332.   When using MICROSOFT ASSEMBLER LINKER, you must change the
  333.   default setting of segments.  The default is 128; however,
  334.   you can reset the number of segments up to 1024.
  335.  
  336.   EX.   Syntax:  LINK <filename>/SE:1024,,,;
  337.  
  338.  
  339.  
  340. PUBLISHED:  16 Dec 1986
  341. MAIN_TOPICS:  INSTALLATION
  342. TEXT:
  343.  
  344.   If Clipper has been installed on the C:drive, and a second
  345.   physical hard drive (D:) is added to the system, invoking
  346.   CLIPPER from the D:drive may return the error:
  347.   "error 0013 - product has been uninstalled"
  348.   even if the path has been set. What to do?
  349.   A: at the D:drive, invoke Clipper with the command:
  350.  
  351.              CLIPPER f #DF=x:
  352.                      where:
  353.                           - f = file to be
  354.                                 compiled
  355.                           - x = drive where Clipper is
  356.  
  357.   - therefore, to compile FILE.PRG from the D:drive with Clipper
  358.     installed in the C:drive, issue the following command at the
  359.     D> prompt:
  360.              CLIPPER FILE #DF=C:
  361.  
  362.  
  363.   - note: may also happen with "partitioned" disks
  364.  
  365.  
  366.  
  367. PUBLISHED:  16 Dec 1986
  368. MAIN_TOPICS:  INSTALLATION: HIGH DENSITY
  369. TEXT:
  370.  
  371.   HIGH DENSITY DISKETTES - Users who are installing a floppy
  372.   working copy must use a formatted, double sided, double density
  373.   diskette as the target disk.  The messages, "Install terminated
  374.   Error Code 6100 or 8304 " will be displayed if the target
  375.   diskette is high capacity (1.2 Mb).
  376.  
  377.   HIGH DENSITY DRIVES - Any floppy disk made in or written to in
  378.   the high capacity drive may be unusable on a regular disk drive.
  379.   With this in mind, if the distribution disk will be used to
  380.   install on machines with regular drives, run INSTALL from the
  381.   low density drive.  If the working copy is to be used on
  382.   regular drives in addition to high density drives, make the
  383.   working copy in a low density drive.  If the IBM AT has only
  384.   one low density drive, use it for a one drive install
  385.   specifying that drive letter for both Product and Target disks.
  386.  
  387.  
  388.  
  389.  
  390. PUBLISHED:  16 Dec 1986
  391. MAIN_TOPICS:  INSTALLATION: THYSYS FASTCARD
  392. TEXT:
  393.  
  394.   When using THYSYS FASTCARD be sure to turn the cash buffer off;
  395.   otherwise, you will get an installation error #120.  With the
  396.   cash buffer on, SUPERLoCK thinks it is trying to copy to a RAM
  397.   disk.
  398.  
  399.  
  400.  
  401. PUBLISHED:  16 Dec 1986
  402. MAIN_TOPICS:  INSTALLATION
  403. TEXT:
  404.  
  405.   The version of SUPERLoK (2.0.3) that we use on CLIPPER supports
  406.   the Televideo IBM compatibles, including the portable TCB2.
  407.   The TCB2, however, has undergone various changes in its EPROM
  408.   and only releases D and higher are supported.  How, you ask,
  409.   does a customer know if he has the wrong EPROM ?  Well, that's
  410.   probably why he's calling us in the first place - 'cause it
  411.   dosn't install. Advise the customer to call Televideo Tech
  412.   Support.  The numbers are:
  413.      In CA: 1-800-821-3774
  414.      Outside CA: 1-800-521-4897
  415.  
  416.   They will arrange for him to receive a free upgraded EPROM and
  417.   then his installation problems will be over.
  418.  
  419.  
  420.  
  421. PUBLISHED:  16 Dec 1986
  422. MAIN_TOPICS:  INSTALLATION
  423. TEXT:
  424.  
  425.   SUPERLoK does not want to install on a two drive
  426.   A.C.T EXTURBO (P.C.clone).  In  fact, in some cases
  427.   it will completly trash your CLIPPER disk.
  428.  
  429.  
  430.  
  431.  
  432. PUBLISHED:  16 Dec 1986
  433. MAIN_TOPICS:  INSTALLATION: ROUTINE BACKUPS
  434. TEXT:
  435.  
  436.       Users who do routine daily or weekly backups of their hard
  437.   disks do not have to use the UNInstall command.  If they are
  438.   unsure if they are restoring the root directory then use the
  439.   "/p" option on the DOS RESTORE command when and if a RESTORE
  440.   becomes necessary.  Reply N if any attempts are made to restore
  441.   "read-only" files.  In this way protected programs will never
  442.   become unauthorized.  The "/p" option of the RESTORE command
  443.   will not harm anything even if it is not nesessary.  Some
  444.   marketers of third party backup/restore programs have made
  445.   changes to their program so that the "/p" is not required.
  446.   The only special consideration when using these programs
  447.   is to UNInstall if you plan to reformat your hard disk.
  448.  
  449.  
  450.  
  451. PUBLISHED:  16 Dec 1986
  452. MAIN_TOPICS:  INSTALLATION: SUPERLOK UNINSTALL
  453. TEXT:
  454.  
  455.   When to use the SUPERLoK UNInstall:
  456.  
  457.   1.  If for some reason you need to reformat your hard disk.
  458.       For instance you are having some type of problem which
  459.       requires removal, repair or you need to re-partition the
  460.       disk then you need to UNInstall the SUPERLoK protected
  461.       products.  Formatting a hard disk will unauthorize
  462.       protected products and will cause you to loose an
  463.       "install count" unless you UNInstall first.  This is
  464.       unfortunate but necessary to prevent unauthorized copies
  465.       from easily being transferred to other hard disks.  If
  466.       you know that you will be reformatting, then:
  467.  
  468.       a)  UNInstall the protected products.
  469.       b)  Do a full BACKUP of the hard disk.
  470.       c)  Do the re-formatting or whatever is necessary.
  471.       d)  RESTORE the entire hard disk ("/p" not required).
  472.       e)  Re-Install the protected products.
  473.  
  474.   2.  If you want to move the protected software from the hard
  475.       disk on one computer to the hard disk of another computer
  476.       then it is necessary to use the SUPERLoK UNInstall and
  477.       Install procedures.  In this way you will never have more
  478.       than one authorized copy at a time.
  479.  
  480.  
  481. PUBLISHED:  16 Dec 1986
  482. MAIN_TOPICS:  INSTALLATION: BACKUP, RESTORE
  483. TEXT:
  484.  
  485.   SUPERLoK 2.0.3 Backup / Restore Considerations
  486.  
  487.      With version 2.0.3 of Softgaurd's SUPERLoK protection system
  488.   additional ease-of-use features were incorporated into the hard
  489.   disk protection.  When SUPERLoK protected software is installed
  490.   to any hard disk directory the floppy "key" disk is not required
  491.   for execution. The software remains protected on the hard disk.
  492.   SUPERLoK protection is designed to prevent the unauthorized
  493.   transfer of the protected software from one hard disk to
  494.   another.
  495.   The SUPERLoK UNINSTALL feature allows the user to remove the
  496.   protected software from the hard disk in a controlled manner.
  497.  
  498.   With regard to backing up or restoring a hard disk which
  499.   contains SUPERLoK 2.0.3 protected sofware the following should
  500.   be noted:
  501.  
  502.    The DOS BACKUP (or similar backup's from other vendors) may
  503.    be used freely and can never have any adverse effect on the
  504.    protected software.
  505.  
  506.    Users may freely copy the protected software from one sub-
  507.    directory to another on the same hard disk with no
  508.    restrictions.  The protected software may be executed from
  509.    any hard disk directory.
  510.  
  511.    The only restrictions have to do with RESTORING a hard disk.
  512.    To be more specific, only when the root directory is to be
  513.    restored (which would include the case when a full 10MB or
  514.    20MB restore is being done) must the user do anything
  515.    different from the way unprotected software would be
  516.    handled.  When restoring the root directory you must use
  517.    the "/p" option on the DOS RESTORE command.  This option
  518.    will prompt the user each time it attempts to restore
  519.    a "read-only' file.  The user should reply N to the request.
  520.    In this way the protected products will remain authorized.
  521.    Note the following examples which should make this more
  522.    clear:
  523.  
  524.   a)  If the protected
  525.  product has been installed in some
  526.       directory other than the root directory then this
  527.       directory may be freely backed up and restored just
  528.       as you would if the software were not protected.
  529.  
  530.   b)  The protected program and its related files may be
  531.  
  532.   backed up and restored even to the root directory
  533.       with no restrictions if specific file names are used.
  534.       Remember that it is only a full root directory restore
  535.       that requires the "/p" option on the DOS RESTORE command.
  536.  
  537.   c)  If a streaming tape is being used to do the backup/restore
  538.       operation then the only special consideration revolves
  539.       around the root derectory of the hard disk.  If you need to
  540.       restore the root directory with a streaming tape, then
  541.       restore the full hard disk.  If only a file restore or a
  542.       sub-directory is being restored, then there are no
  543.       restrictions.
  544.  
  545.  
  546.  
  547. PUBLISHED:  16 Dec 1986
  548. MAIN_TOPICS:  INSTALLATION: SUPERLOK
  549. TEXT:
  550.  
  551.   Computers supported by SUPERLoK 2.0.3a
  552.  
  553.   IBM PC, XT, AT, Portable, 3270
  554.   AT&T PC-6300
  555.   Columbia 1600 VP
  556.   COMPAQ Portable, Plus, Deskpro, and 286
  557.   Corona (may have problems with models made before March 1984)
  558.   Ericsson PC and Portable PC
  559.   HP Vectra
  560.   ITT XTRA and XP
  561.   Kaypro 16
  562.   Leading Edge
  563.   NCR Model 4
  564.   Olivetti M21 and M24 (with 48 TPI disk drives only)
  565.   Panasonic Senior Partner
  566.   Sanyo MBC-775
  567.   Sperry
  568.   Tandy 1000 (when optional DMA card is installed) and 1200
  569.   Televideo AT
  570.      and 1605 (with ROM version 2.4,  earlier versions only ran
  571.      executable distribution copy or floppy working copy
  572.      made on another machine.  Televideo will provide a
  573.      ROM upgrade kit).
  574.   Visual Commuter  (must boot with PC-DOS)
  575.   Wyse 1100
  576.   Zenith 150 (floppy installation on A: drive only.  ZENITH now
  577.               offers a ROM update for its 150 series. It allows
  578.               installation on both drives.  Just call ZENITH and
  579.               ask for update version 1.8A)
  580.  
  581.   ----------------  Special Cases  ------------------------------
  582.  
  583.   The VICTOR VPC and WANG (with PC emulation card) will run an
  584.   executable distribution copy and install to a hard disk; it
  585.   does not install floppy working copies.
  586.  
  587.   The IBM PCjr and EPSON QX-16 will run an executable distribu
  588.   tion copy and install to a hard disk if the distribution disk
  589.   is duplicated on a Formaster machine.  Disks made with SGCOPY
  590.   are not supported.
  591.  
  592.   The GRID CASE will run an executable working distribution copy
  593.   or working copy made on another machine.  It does not support
  594.   either hard disk or floppy disk installs.
  595.  
  596.   The DATA GENERAL 1 will run an executable 5-1/4 " distribution
  597.   copy if the disk was made on a Formaster machine and the
  598.   miniloader has been patched to disable logical drive
  599.   assignments.
  600.  
  601.   The NORTHSTAR DIMENSION will run an executable distribution
  602.   copy if duplicated on a Formaster machine.  Disks made with
  603.   SGCOPY are not supported.
  604.  
  605.   SUPERLoK can be customized to support the APRICOT, DGI (3-1/2"
  606.   microfloppy), GRID CASE (3-1/2" microfloppy), MINDSET, TANDY
  607.   2000, and T.I. PROFESSIONAL.  Available for site licensees and
  608.   large volume dealers.
  609.  
  610.  
  611.  
  612. PUBLISHED:  16 Dec 1986
  613. MAIN_TOPICS:  VAL(<ESPC>)
  614. TEXT:
  615.  The VAL() function correctly returns data as numeric for
  616.  mathematical operations.  However, it displays data like a
  617.  string.  The value is left justified, not right justified.
  618.  
  619.  Example:
  620.  
  621.       CLEAR
  622.       @ 5,0 SAY "|----|----|----|----|----|----|----|"
  623.       @ 6,0 SAY VAL("1")
  624.  
  625.  Output:
  626.  
  627.       CLIPPER
  628.       -------
  629.  
  630.       |----|----|----|----|----|----|----|
  631.                  1
  632.  
  633.        dBASE III
  634.        --------
  635.  
  636.       |----|----|----|----|----|----|----|
  637.             1
  638.  
  639.  
  640.  
  641. PUBLISHED:  16 Dec 1986
  642. MAIN_TOPICS:  TYPE()
  643. TEXT:
  644.  - i  - a TYPE() done on an array name will return "A" for "Array"
  645.       e.g.
  646.         - declare ARRAY[10]
  647.         - ? type("ARRAY")             - * will return "A"
  648.  
  649.   - ii  - a TYPE() done on an array element will return "U" for
  650.           "Undefined" - regardless of any values assigned to it
  651.       e.g.
  652.         - ARRAY[1] = 25
  653.         - ARRAY[2] = "Hello"
  654.         - ? type("ARRAY[1]")          - * will return "U"
  655.         - ? type("ARRAY[2]")          - * will return "U"
  656.  
  657.   - iii- on the other hand, if the array elements are assigned to
  658.          variables, a TYPE() function done on the respective
  659.          varaible will return the appropriate type:
  660.  
  661.     e.g.
  662.         - ARRAY[1] = 25
  663.         - ARRAY[2] = "Hello"
  664.         - A = ARRAY[1]
  665.         - B = ARRAY[2]
  666.         - ? type("A")                 - * will return "N"
  667.         - ? type("B")                 - * will return "C"
  668.  
  669.  
  670.  
  671. PUBLISHED:  16 Dec 1986
  672. MAIN_TOPICS:  STR()
  673. TEXT:
  674.  CLIPPER returns a different LEN() for the STR() of the
  675.  RECNO().
  676.  
  677.  Example:
  678.  ? LEN(STR(RECNO()))
  679.  
  680.        CLIPPER returns a value of 7
  681.        dBASE III returns a value of 10
  682.  
  683.  
  684.  
  685. PUBLISHED:  16 Dec 1986
  686. MAIN_TOPICS:  STR()
  687. TEXT:
  688.  The STR() function does not return the same value as
  689.  dBASE III when used with the DAY or YEAR functions.
  690.  
  691.  Example:
  692.  
  693.       ? LEN(STR(DAY(DATE()))
  694.  
  695.   dBASE III returns a value of 10. CLIPPER returns a value of 3.
  696.  
  697.       ? LEN(STR(YEAR(DATE()))
  698.  
  699.   dBASE III returns value of 10. CLIPPER returns a value of 5.
  700.  
  701.  
  702.  
  703. PUBLISHED:  16 Dec 1986
  704. MAIN_TOPICS:  MEMORY(0)
  705. TEXT:
  706.  About CLIPPER AUTUMN'86's MEMORY(0) function vs the DOS CHKDSK:
  707.  
  708.  A lot of people have been wondering why at times the MEMORY(0)
  709.  function would return a value that is far different from what
  710.  CHKDSK would return.  This is because the MEMORY(0) function
  711.  returns only the memory available in Clipper's immediate
  712.  "free pool" area. It does NOT return any buffer areas such as
  713.  Index, Run, etc.
  714.  
  715.  Running CHKDSK, on the other hand, returns the memory available
  716.  above the Clipper application program (any buffers reserved for
  717.  the Clipper environment are cleared when CHKDSK is loaded and
  718.  reinstated after its execution).
  719.  
  720.        |                             |
  721.        |                             |
  722.        |                             |
  723.      T | (this area may              |  } What CHKDSK will return.
  724.      O |   contain some of           |
  725.      T |     Clipper's Environment   |
  726.      A |       setup...)             |
  727.      L |                             |
  728.        |                             |
  729.      M |-----------------------------|
  730.      E |   -----------               |
  731.      M |  |   free   <----------------- What MEMORY(0) will return.
  732.      O |  |    pool   |              |
  733.      R |   -----------               |
  734.      Y |                             |
  735.        |   Clipper Application       |
  736.        |                             |
  737.         ---
  738. --------------------------
  739.  
  740.  
  741.   e.g. (this program was tested on a 640K machine)
  742.   clear
  743.   declare A[2000],B[2000],C[2000],D[2000]
  744.   ? memory(0)                             && may return 29K
  745.   run chkdsk                              && may return 173K
  746.  
  747.  
  748.  
  749. PUBLISHED:  16 Dec 1986
  750. MAIN_TOPICS:  MEMOEDIT()
  751. TEXT:
  752.  The contents of a DBT file are handled in blocks of 512 bytes.
  753.  Each memo field in a DBF file record contains the block number
  754.  (in ASCII) which identifies the memo field data location.  If
  755.  the memo field contains no data, there is no number in the DBF
  756.  file.  When you write to the memo field, the next available
  757.  block is used and its number is stored in the memo field of that
  758.  record (invisibly behind the word 'memo').
  759.  There is a difference between the way Clipper and dBase III
  760.  handle changes to an exsiting memo field.  When you change a
  761.  memo field using dBASE III, the old contents remain in the DBT
  762.  file.  The changed contents are rewritten to the next available
  763.  block, and the number in the DBF change to reflect the new
  764.  location.  This leaves the old block unused with no pointer to
  765.  it in the DBF, which explains why DBT files grow to such a large
  766.  size.  Clipper continues using the same block until the whole
  767.  512 bytes are used.  Clipper discards the block once it is full,
  768.  copies its contents to the next available block and continues
  769.  writing to the following block.  The block pointer is then
  770.  changed in the DBF. The following chart illustrates the differ-
  771.  ences in DBT size:
  772.  Resultant DBT File Size per DIR
  773.  
  774.  SUCCESSIVE ACTIVITIES      CLIPPER        dBASE III
  775.  --------------------------------------------------------
  776.  
  777.  Create empty database        512            513
  778.  
  779.  First record processed
  780.  
  781.  add initial character       1026            515
  782.  
  783.  change initial character    1026            1027
  784.  
  785.  add second character        1027            1540
  786.  
  787.  Second record processed
  788.  
  789.  add initial character       1538            2051
  790.  
  791.  change initial character    1538            2563
  792.  
  793.  add second character        1539            3076
  794.  -------------------------------------------------------
  795.  
  796.  
  797.  
  798. PUBLISHED:  16 Dec 1986
  799. MAIN_TOPICS:  ISCOLOR()
  800. TEXT:
  801.  The ISCOLOR() will return a .T. on a AT&T 6300 with a high
  802.  resolution monochrome monitor.
  803.  
  804.  
  805.  
  806. PUBLISHED:  16 Dec 1986
  807. MAIN_TOPICS:  IF(<EXP1>,<ESP2>,<EXP3>)
  808. TEXT:
  809.  Regardless of the validity of the first expression, the IF()
  810.  function will still analyze the remaining two expressions. This
  811.  is a problem when trying to use the IF() function to avoid
  812.  Divide by Zero errors.
  813.  
  814.  Example:
  815.  
  816.       Y=0
  817.       N=1
  818.       ? IF(Y=0,0,N/Y)
  819.       ? IF(Y<>0,N/Y,0)
  820.  
  821.       Y=1
  822.       ? IF(Y=0,0,N/Y)
  823.       ? IF(Y<>0,N/Y,0)
  824.  
  825.  
  826.  
  827. PUBLISHED:  16 Dec 1986
  828. MAIN_TOPICS:  INKEY()
  829. TEXT:
  830.  The INKEY value of <control> END and <control> W is the same.
  831.  They both return 23.  But, they have different functions.
  832.  
  833.  
  834.  
  835. PUBLISHED:  16 Dec 1986
  836. MAIN_TOPICS:  FILE()
  837. TEXT:
  838.  1) The FILE() does not recognize hidden files.
  839.  2) The FILE() in CLIPPER will allow the use of wildcards
  840.     when referring to files.
  841.  
  842.     Example:
  843.             ? FILE("*.PRG")    && will return .T. if any .PRG
  844.             *                     files exist in directory.
  845.  
  846.  
  847.  
  848. PUBLISHED:  16 Dec 1986
  849. MAIN_TOPICS:  CTOD()
  850. TEXT:
  851.  CLIPPER will not accept an invalid date in a CTOD().
  852.  dBASE III will convert an invalid date to its proper
  853.  equivalent. Also, CLIPPER will return the absolute value
  854.  of a negative month.
  855.  
  856.  Example:
  857.  
  858.     ? CTOD("02\30\86")
  859.       CLIPPER            dBASE
  860.       -------            -----
  861.       "  \  \  "         "03\02\86"
  862.  
  863.      ? CTOD("02\-28\86")
  864.       CLIPPER            dBASE
  865.       -------            -----
  866.       "02\28\86"         "01\03\86"
  867.  
  868.  
  869.  
  870.  
  871. PUBLISHED:  16 Dec 1986
  872. MAIN_TOPICS:  CTOD()
  873. TEXT:
  874.  CLIPPER and dBASE III PLUS evaluate relational comparisons
  875.  between dates differently if one of them is blank or empty.
  876.  CLIPPER treats the blank date as less than the substantive
  877.  one.  dBASE illogically denies that either date exceeds the
  878.  other or that they are equal.
  879.  Example:
  880.  
  881.  date = CTOD('06/02/86')
  882.  blank = CTOD('  /  /  ')
  883.                        dDBASE               CLIPPER
  884.                       --------              --------
  885.  ? date > blank         .F.                   .T.
  886.  ? date < blank         .F.                   .F.
  887.  ? date = blank         .F.                   .F.
  888.  
  889.  
  890.  
  891. PUBLISHED:  16 Dec 1986
  892. MAIN_TOPICS:  CHR(N)
  893. TEXT:
  894.  CLIPPER does not support the use of CHR(0), the null byte.
  895.  This has its roots in the use of the null byte as the standard
  896.  string terminator in the C language, in which CLIPPER is written
  897.  and to whose standards it adheres.  For example, if you assign
  898.  
  899.      x = "ABC" + CHR(0) + "DEF"
  900.      ? LEN(x)
  901.  
  902.  the length function returns six, not seven.  Similarly, if you
  903.  try to send a string consisting of CHR(0) to a device, the
  904.  CHR(0) itself is interpreted as the end of the string, so
  905.  nothing is sent.
  906.  In order to send CHR(0) to a printer, it must be sent by itself.
  907.  
  908.  Example:
  909.         SET PRINTER ON
  910.         ? CHR(0) + CHR(n)    && the CHR(0) will not be sent
  911.  
  912.  Work-around:
  913.         SET PRINTER ON
  914.         ? CHR(0)
  915.         ?? CHR(12)           && this will be accepted by printer
  916.  
  917.  
  918.  
  919. PUBLISHED:  16 Dec 1986
  920. MAIN_TOPICS:  &MACRO
  921. TEXT:
  922.  The maximum amount of conditions in a MACRO is 15.  On the 16th
  923.  condition you will get a MACRO ERROR FAULT.  The amount of
  924.  conditions allowed is dependent on the complexity of the
  925.  conditions.  For example:  When using ALIASES (->) the upper
  926.  limit is 9.  The 10th causes the error.
  927.  
  928.  
  929.  
  930. PUBLISHED:  16 Dec 1986
  931. MAIN_TOPICS:  TOTAL TO <FILE> ON <KEY>
  932. TEXT:
  933.  The TOTAL command requires that the fields being TOTALed
  934.  are large enough to store the results of the TOTAL.
  935.  AUTUMN '86 will return the error DATABASE NUMERIC OVERFLOW.
  936.  
  937.  
  938.  
  939. PUBLISHED:  16 Dec 1986
  940. MAIN_TOPICS:  TOTAL TO <FILE> ON <KEY>
  941. TEXT:
  942.  The maximum number of fields to be TOTALED is 61 in WINTER '85
  943.  and 120 in AUTUMN '86.
  944.  
  945.  
  946.  
  947. PUBLISHED:  16 Dec 1986
  948. MAIN_TOPICS:  SET RELATION
  949. TEXT:
  950.  CLIPPER/dBASE have different interaction between
  951.  SET RELATION ... INTO and SET FILTER TO
  952.  
  953.  If:
  954.     -  you USE a parent file,
  955.     -  SET RELATION ... INTO a child file on a field with the
  956.        same name in both files, and
  957.     -  SET a FILTER condition on the child file,
  958.  
  959.  then,
  960.  
  961.     in dBASE - the child pointer, under control of the RELATION
  962.     while the parent pointer is being manipulated, is allowed to
  963.     land on records that fail the condition.  Most other opera-
  964.     tions on the child pointer, including a direct FIND or SEEK,
  965.     are blind to these unqualified records.  SET RELATION is an
  966.     exception.  This is mentioned in Ashton-Tate's Tech Notes
  967.     journal, May 86 issue, p. 11.
  968.  
  969.     in CLIPPER - the child pointer in the same situation goes to
  970.     EOF. Child pointer behavior in response to parent pointer
  971.     movement is the same as in response to FIND and other
  972.     commands, i.e., it respects the FILTER condition.
  973.  
  974.  
  975.  
  976.  
  977. PUBLISHED:  16 Dec 1986
  978. MAIN_TOPICS:  SET PRINTER TO <DESTINATION>
  979. TEXT:
  980.  dBASE will accept the statement SET PRINTER TO LPT1:.  CLIPPER
  981.  will issue a DOS ERROR 2  LPT1: NOT FOUND.  CLIPPER interprets
  982.  the colon to be part of a file name.
  983.  The work-around is to eliminate the colon in the statement.
  984.  SET PRINTER TO LPT1 will work.
  985.  
  986.  
  987.  
  988. PUBLISHED:  16 Dec 1986
  989. MAIN_TOPICS:  SET MESSAGE TO <N>
  990. TEXT:
  991.  The line used in a SET MESSAGE TO <n> is reserved only for
  992.  that command, and is not available for other displays.
  993.  
  994.  Example:
  995.         SET MESSAGE TO 24
  996.         @ ROW, COL PROMPT "XXXX" MESSAGE "XXXX"
  997.         --source code--
  998.         MENU TO
  999.         --source code--
  1000.         @ 24, 5 PROMPT "PRINT THIS"   && This will not appear on
  1001.         *                             the screen since line 24
  1002.         *                             is reserved for messages.
  1003.  
  1004.  Work-around:
  1005.        SET MESSAGE TO <nothing> will free that line.
  1006.  
  1007.  
  1008.  
  1009. PUBLISHED:  16 Dec 1986
  1010. MAIN_TOPICS:  SET KEY TO
  1011. TEXT:
  1012.  When calling a SET KEY TO procedure or the F1 help program from
  1013.  a WAIT TO <var> command, the variable name is not passed to the
  1014.  input_var PARAMETER.
  1015.  
  1016.  
  1017.  
  1018.  
  1019. PUBLISHED:  16 Dec 1986
  1020. MAIN_TOPICS:  SET FUNCTION
  1021. TEXT:
  1022.  If the function keys were set from DOS, then you can't
  1023.  set the function keys in CLIPPER.  CLIPPER dosn't bypass
  1024.  what the keys were set to.  If you clear the buffers before
  1025.  using an EXE,  then they can be set.
  1026.  
  1027.  
  1028.  
  1029. PUBLISHED:  16 Dec 1986
  1030. MAIN_TOPICS:  SET FORMAT TO
  1031. TEXT:
  1032.  When using .CLP files with a program that has SET FORMAT TO
  1033.  statements, the .FMT files must have .PRG extensions and
  1034.  they must be included in the same .CLP file as the calling
  1035.  program.  If they are not included the error message FATAL AT n
  1036.  ILLEGAL SYMBOL MODE will occur where n is the last line of the
  1037.  calling program.
  1038.  
  1039.  Another work-around is to declare the format files as externals
  1040.  by using the EXTERNAL command, then compile the format files in
  1041.  a seperate .CLP file.
  1042.  
  1043.  This has been fixed in AUTUMN '86.
  1044.  
  1045.  
  1046.  
  1047. PUBLISHED:  16 Dec 1986
  1048. MAIN_TOPICS:  SET FILTER TO
  1049. TEXT:
  1050.  When a MACRO is used to set a filter, the filter is changed
  1051.  whenever the macro variable is changed.  In dBASE, the
  1052.  filter is retained in memory and the memory variable becomes
  1053.  available for other uses; but, in CLIPPER a reference is
  1054.  continually made to the variable when addressing the filter.
  1055.  
  1056.  
  1057.  
  1058.  
  1059. PUBLISHED:  16 Dec 1986
  1060. MAIN_TOPICS:  SET ESCAPE OFF
  1061. TEXT:
  1062.  When an <esc> is entered from a MENU TO command, a zero is
  1063.  placed in the variable.  SET ESCAPE does not affect this
  1064.  command.
  1065.  
  1066.  Work-around: Use the SET KEY command to nulify the <esc> key
  1067.  
  1068.                 SET KEY 27 TO proc_name
  1069.                 -source code -
  1070.                 -etc.
  1071.  
  1072.                 PROCEDURE proc_name
  1073.                 PARAMETERS a,b,c
  1074.                 RETURN
  1075.  
  1076.  
  1077.  
  1078. PUBLISHED:  16 Dec 1986
  1079. MAIN_TOPICS:  SELECT ALIAS
  1080. TEXT:
  1081.  If an alias is SELECTed but never defined, CLIPPER will not
  1082.  issue an error message.  A DELETE or REPLACE issued in
  1083.  this work area will result in a REC !IN NTX error message.
  1084.  
  1085.  
  1086.  
  1087. PUBLISHED:  16 Dec 1986
  1088. MAIN_TOPICS:  REPLACE
  1089. TEXT:
  1090.  dBASE III allows REPLACEment into a numeric field of a number
  1091.  too large to fit field specifications, if the specs include
  1092.  decimal places.  CLIPPER WINTER '85 fills the field with
  1093.  asterisks.  AUTUMN '86 will display the error "Database
  1094.  Numeric Overflow".
  1095.  
  1096.  Example:
  1097.         fieldname is defined as a numeric field 6 positions
  1098.         wide with 3 decimal places.
  1099.         var = 123456
  1100.         REPLACE fieldname WITH var
  1101.  
  1102.      Results-     dBASE III = 123456
  1103.                   CLIPPER   = ******
  1104.  
  1105.  
  1106. PUBLISHED:  16 Dec 1986
  1107. MAIN_TOPICS:  RELEASE ALL
  1108. TEXT:
  1109.  A variable declared PUBLIC can not be RELEASED with the RELEASE
  1110.  ALL statement.
  1111.  The PUBLIC statement takes precedence over the RELEASE statement.
  1112.  However, you can release a specified variable.
  1113.  
  1114.  Example:
  1115.      PUBLIC var
  1116.      RELEASE ALL
  1117.      ? var  && var will = .F.
  1118.      RELEASE var
  1119.      ? var  && var will be undefined.
  1120.  
  1121.  
  1122.  
  1123. PUBLISHED:  16 Dec 1986
  1124. MAIN_TOPICS:  RANGE
  1125. TEXT:
  1126.  If a variable is initialized to a value outside of the specified
  1127.  RANGE, CLIPPER will not allow you to keep this default value.
  1128.  dBASE will erroneously accept this value.
  1129.  
  1130.  Example:  x = 5
  1131.            y = 10
  1132.            num = 0
  1133.            @ 2,10 GET num RANGE x,y
  1134.            READ                     && CLIPPER results in
  1135.            *                           out of range message
  1136.  
  1137.  Work-around:
  1138.            @ 2,10  GET num VALID ((num=0) .or. (num>=x .AND. num<=y))
  1139.  
  1140.  
  1141.  
  1142. PUBLISHED:  16 Dec 1986
  1143. MAIN_TOPICS:  PRIVATE ALL
  1144. TEXT:
  1145.  The CLIPPER manual states non-support of the PRIVATE ALL
  1146.  command; however, the command will compile without an error
  1147.  message and create a PRIVATE variable named "ALL".
  1148.  
  1149.  
  1150.  
  1151. PUBLISHED:  16 Dec 1986
  1152. MAIN_TOPICS:  LOCATE
  1153. TEXT:
  1154.  Although it is not documented, dBASE III will allow
  1155.  LOCATE RECORD n.  CLIPPER will give the error message
  1156.  TYPE CONFLICT IN CONDITION.
  1157.  
  1158.  
  1159.  
  1160.  
  1161. PUBLISHED:  16 Dec 1986
  1162. MAIN_TOPICS:  LOCATE [<SCOPE>] [FOR/WHILE <CONDITION>]
  1163. TEXT:
  1164.  The WHILE option in the LOCATE command requires a preceding FOR.
  1165.  Otherwise, a "TYPE CONFLICT IN CONDITION " error will occur.
  1166.  
  1167.  
  1168.  
  1169. PUBLISHED:  16 Dec 1986
  1170. MAIN_TOPICS:  KEYBOARD
  1171. TEXT:
  1172.  CLIPPER has a keyboard buffer limit of 16 characters.
  1173.  Utilities such as BIGBUF will not expand limitation.
  1174.  
  1175.  
  1176.  
  1177. PUBLISHED:  16 Dec 1986
  1178. MAIN_TOPICS:  KEYBOARD
  1179. TEXT:
  1180.  The following keys are not functional with the KEYBOARD
  1181.  command:
  1182.          HOME CHR(1), END CHR(6), CTRL PgUp CHR(30) and
  1183.          CTRL PGDN CHR(31).
  1184.  
  1185.  
  1186.  
  1187. PUBLISHED:  16 Dec 1986
  1188. MAIN_TOPICS:  KEYBOARD
  1189. TEXT:
  1190.  The KEYBOARD command will not stuff the keyboard buffer with
  1191.  a negative number. For example, if you stuff the keyboard
  1192.  with a CHR(-1) , it will return a CHR(255).
  1193.  
  1194.  
  1195.  
  1196. PUBLISHED:  16 Dec 1986
  1197. MAIN_TOPICS:  JOIN
  1198. TEXT:
  1199.  CLIPPER requires that you use alias arrows when listing fields
  1200.  outside the active file in USE.  dBASE does not require them
  1201.  unless both work areas have duplicate field names.
  1202.  
  1203.  
  1204.  
  1205. PUBLISHED:  16 Dec 1986
  1206. MAIN_TOPICS:  INDEX ON
  1207. TEXT:
  1208.  CLIPPER will allow indexing on a memo field if spaces
  1209.  are added to the index expression.
  1210.  Example:  INDEX ON memfield + SPACE(100) TO mem_ntx
  1211.  
  1212.  
  1213.  
  1214. PUBLISHED:  16 Dec 1986
  1215. MAIN_TOPICS:  INDEX ON
  1216. TEXT:
  1217.  If you index just after the computer is turned on, the index
  1218.  time is much slower.  But if you index immediately after,
  1219.  the speed will be faster.  Apparently this has somthing to
  1220.  do with DOS.  This test was done on a COMPAQ 286 with 640K RAM
  1221.  and DOS 3.0.
  1222.  
  1223.  
  1224.  
  1225. PUBLISHED:  16 Dec 1986
  1226. MAIN_TOPICS:  INDEX ON
  1227. TEXT:
  1228.  When INDEXing on a numeric field divided by another numeric, the
  1229.  runtime error "Divde by zero" will occur.  This is because
  1230.  CLIPPER evaluates the length of an index on a blank record.
  1231.  A blank numeric field is a zero, resulting in the error.
  1232.  
  1233.  Work-around:
  1234.              INDEX ON the zero function illustrated in the
  1235.              READ_ME.1ST file under the REPORT FORM command.
  1236.              The decimal length of the index is determined by
  1237.              the RETURN statement in the function.
  1238.              Example:
  1239.                     FUNCTION ZERO
  1240.                     PARAMETERS znum1, znum2
  1241.                     IF znum2 <> 0
  1242.                        RETURN (znum1/znum2)
  1243.                     ENDIF
  1244.                     RETURN (0.00)        && This sets the decimals
  1245.                                          * place to 2.
  1246.  
  1247.  
  1248.  
  1249. PUBLISHED:  16 Dec 1986
  1250. MAIN_TOPICS:  FUNCTION <NAME>
  1251. TEXT:
  1252.  CLIPPER will not allow the FUNCTION statement within an IF
  1253.  statement.  The error "Unbalanced IF/ELSE" will occur.
  1254.  The same is true when creating a PROCEDURE.
  1255.  
  1256.  Example:
  1257.         IF Clipper
  1258.            FUNCTION funcname
  1259.             ---code---
  1260.            RETURN (X)
  1261.         ENDIF
  1262.  
  1263.   Work-around:
  1264.              IF Clipper
  1265.                 DO procedure && which creates a function
  1266.              ENDIF
  1267.  
  1268.  
  1269.  
  1270. PUBLISHED:  16 Dec 1986
  1271. MAIN_TOPICS:  EJECT
  1272. TEXT:
  1273.  Some printers , i.e. Citoh, do not recognize the EJECT command.
  1274.  
  1275.    Workaround: Instead of EJECT, do this procedure
  1276.  
  1277.       SET DEVICE TO PRINT
  1278.       SET CONSOLE OFF
  1279.       @ 0,0 SAY CHR(13)
  1280.       SET PRINT ON
  1281.       ?? CHR(12)
  1282.       SET PRINT OFF
  1283.       SET CONSOLE ON
  1284.       SET DEVICE TO SCREEN
  1285.  
  1286.  
  1287. PUBLISHED:  16 Dec 1986
  1288. MAIN_TOPICS:  DO <PROCEDURE> WITH <PARAMETER LIST>
  1289. TEXT:
  1290.  If a M->memvar is passed as a parameter, the memvar is passed
  1291.  by value. Any changes made in the called procedure will not
  1292.  change the original memvar.  This is also true in dBASE but
  1293.  worth noting in this journal.
  1294.  
  1295.  
  1296.  
  1297. PUBLISHED:  16 Dec 1986
  1298. MAIN_TOPICS:  DO <PROC> WITH <PARAMETER LIST>
  1299. TEXT:
  1300.  To pass a field to a procedure as a parameter, the fieldname
  1301.  must be in parenthesis.  For example:
  1302.  
  1303.       DO IT WITH (sally)
  1304.  
  1305.  This passes the field (sally) to the procedure IT by value.
  1306.  
  1307.       PROCEDURE IT
  1308.       PARAMETER memvar
  1309.  
  1310.  (memvar) contains the image of (sally). Changing (memvar) will
  1311.  not change (sally).
  1312.  
  1313.  
  1314.  
  1315. PUBLISHED:  16 Dec 1986
  1316. MAIN_TOPICS:  DO FILENAME
  1317. TEXT:
  1318.  The official party-line limit on procedure name lengths is 10
  1319.  characters, same as dBASE.  However, names up to and including 15
  1320.  characters seem to work.
  1321.  
  1322.  Problem: names 16 characters or greater cause compilation to halt
  1323.  abruptly on the DO <procedure name> command line.  Neither Alt-C
  1324.  nor Ctrl-Break will unfreeze the system.  Ctrl-Alt-Del will reset.
  1325.  
  1326.  Examples:
  1327.  
  1328.  ** This program can be compiled
  1329.  ? "hello"
  1330.  do A23456789012345
  1331.  ? "goodbye"
  1332.  
  1333.  procedure A23456789012345
  1334.  ? "I'm a subroutine"
  1335.  return
  1336.  
  1337.  ----------------------------------
  1338.  
  1339.  ** This program cannot be compiled
  1340.  ? "hello"
  1341.  do A234567890123456
  1342.  ? "goodbye"
  1343.  
  1344.  procedure A234567890123456
  1345.  ? "I'm a subroutine"
  1346.  return
  1347.  
  1348.  
  1349.  
  1350. PUBLISHED:  16 Dec 1986
  1351. MAIN_TOPICS:  DO <FILENAME>
  1352. TEXT:
  1353.  CLIPPER will not DO a file that begins with a number.
  1354.  All programs must begin with a letter or the error message
  1355.  ".PRG assumed external" will occur.  However, if the
  1356.  main program begins with a number it can be compiled.
  1357.  
  1358.  
  1359.  
  1360. PUBLISHED:  16 Dec 1986
  1361. MAIN_TOPICS:  DECLARE - ARRAYS
  1362. TEXT:
  1363.  
  1364.  Memory is allocated "dynamically" when using arrays.
  1365.  For example:
  1366.      If an array of 100 elements has been declared, a pointer
  1367.      is set from the memvar area to a small chunk of memory area
  1368.      where a reference to the array elements are kept. This
  1369.      array area is 22 bytes wide times the number of elements long.
  1370.      (See figure 1)
  1371.  
  1372.      If the values in the array elements are of type NUMERIC,
  1373.      they are stored within this area in their respective
  1374.      storage element area. (See figure 2)
  1375.  
  1376.      If the values were of type CHARACTER, a pointer is set from
  1377.      the storage element area of that array to any contiguous
  1378.      area of memory that can hold that string. (See figure 3)
  1379.  
  1380.      figure 1:
  1381.             memvar area
  1382.             ------------------            22 bytes
  1383.             |                  |          <--long-->
  1384.              ------------------          |-----------|
  1385.  
  1386.              ------------------          |-----------|   Array(100)
  1387.             |                  |         |-----------|      |
  1388.              ------------------          |-----------|      |
  1389.             |  Array(100)      | ------> |-----------|      
  1390.              ------------------          |-----------|
  1391.             |                  |         |-----------|
  1392.                                        |         |
  1393.  
  1394.  
  1395.  
  1396.     figure 2:
  1397.  
  1398.                     22 bytes long
  1399.                  ------------------
  1400.                 |  1)              |           Array(2) = 75
  1401.                  ------------------       Array(3) = 40
  1402.        |  2)  75          |
  1403.       |          ------------------
  1404.   Array(100)    |  3)  40          |
  1405.       |          ------------------
  1406.       |         |  4)              |
  1407.                 ------------------
  1408.                 |                  |
  1409.                              
  1410.  
  1411.  
  1412.  
  1413.    figure 3:
  1414.  
  1415.                                                 ---------------
  1416.                22 bytes long                 ----> | "Hello There" |
  1417.              ------------------              |       ---------------
  1418.             |  1)              | ------------
  1419.              ------------------
  1420.    |  2)  75          |
  1421.       |      ------------------             Array(1) = "Hello There"
  1422.   Array(100 |  3)  40          |            Array(4) = "Waz Happenin..."
  1423.       |          ------------------
  1424.       |     |  4)              | -----
  1425.             ------------------       |
  1426.             |                  |      |            -------------------
  1427.                                      ---------> | "Waz Happenin..." |
  1428.  
  1429.                                                    -------------------
  1430.  
  1431.  
  1432.  
  1433. PUBLISHED:  16 Dec 1986
  1434. MAIN_TOPICS:  DECLARE <ARRAY NAME> [EXPN]
  1435. TEXT:
  1436.  
  1437.  When GETting array elements from a loop, the VALID option will
  1438.  only work on the array element to which the variable indexing the
  1439.  array is assigned.  In the following example,  only array
  1440.  element five will honor the VALID statement.
  1441.  
  1442.  Example:
  1443.  
  1444.  DECLARE ARR[7]
  1445.  FOR X = 1 TO 7
  1446.     ARR[X] = 'A'
  1447.  NEXT
  1448.  col = 24
  1449.  FOR X = 1 TO 7
  1450.     @ ROW() + 1 , col  GET ARR[X]  VALID (ARR[X] $ "AB")
  1451.  NEXT
  1452.  x = 5
  1453.  READ
  1454.  RETURN
  1455.  *** Note:  The RANGE option will work with numerics.
  1456.  
  1457.  
  1458.  
  1459. PUBLISHED:  16 Dec 1986
  1460. MAIN_TOPICS:  COPY FILE
  1461. TEXT:
  1462.  
  1463.  Command.com must be available to the default drive when issuing
  1464.  this command.
  1465.  
  1466.  Example:
  1467.         COPY FILE a:filename TO b:filename
  1468.         if A: is the default drive then Command.com must be
  1469.         on that drive.
  1470.  
  1471.  
  1472. PUBLISHED:  16 Dec 1986
  1473. MAIN_TOPICS:  APPEND FROM <FILENAME> [FOR/WHILE <CONDITION>]
  1474. TEXT:
  1475.  When appending from a file with a FOR/WHILE condition, CLIPPER
  1476.  requires that the fields referred to in the condition are
  1477.  present in both files.  CLIPPER will not append any records,
  1478.  but dBASE will accept it.  Also, the fields must be of the
  1479.  same type.  Otherwise, TYPE CONFLICT IN REPLACE will occur.
  1480.  
  1481.  
  1482.  
  1483. PUBLISHED:  16 Dec 1986
  1484. MAIN_TOPICS:  APPEND FROM <FILENAME>
  1485. TEXT:
  1486.  If you go into dBASE III, use a .DBF, delete records from there,
  1487.  pack it, and then go into Clipper and then append from that file,
  1488.  Clipper may add those deleted records.
  1489.  
  1490.  The above happens because after a PACK transaction, dBASE does
  1491.  not reset DOS's eof marker, and Clipper (which reads to DOS's eof)
  1492.  will add those "deleted/packed" records.  You can avoid this
  1493.  problem by:
  1494.  
  1495.  1 - doing ALL your file processing in Clipper, or
  1496.  
  1497.  2 - if you have to go into dBASE, then the minute you get
  1498.  back into Clipper, open the file and then close it before
  1499.  you do any type of transaction. This ensures that the
  1500.  DOS eof marker is reset to the real end-of-file.
  1501.  
  1502.  
  1503.  
  1504. PUBLISHED:  16 Dec 1986
  1505. MAIN_TOPICS:  @ ROW, COL SAY <EXP> GET <EXP>
  1506. TEXT:
  1507.  If a row greater than 24 is specified, no error message will
  1508.  be displayed.  Instead, the cursor will go to the bottom of
  1509.  the screen and the program will hang.
  1510.  
  1511.  
  1512. PUBLISHED:  16 Dec 1986
  1513. MAIN_TOPICS:  @ [EXPN],[EXPN] SAY [EXPC] PICT [PICT. LIST]
  1514. TEXT:
  1515.  A PICTURE clause that uses the 9 or # symbol but specifies no
  1516.  decimal position causes the decimal position of a numeric [exp]
  1517.  to be rounded. dBASE III instead truncates it.
  1518.  
  1519.  Example:
  1520.       x = 2.6
  1521.       @ 10,10 SAY x PICT "9"
  1522.  
  1523.   ********* Output ********
  1524.  
  1525.   dBASE III        CLIPPER
  1526.  
  1527.       2               3
  1528.  
  1529.  
  1530. PUBLISHED:  16 Dec 1986
  1531. MAIN_TOPICS:  '!=='
  1532. TEXT:
  1533.  The exclamation mark used with the double equal sign will
  1534.  not work.  The error MACRO ERROR EXPRESSION will occur.
  1535.  
  1536.  
  1537. PUBLISHED:  16 Dec 1986
  1538. MAIN_TOPICS:  APPEND FROM <FILENAME>
  1539. TEXT:
  1540.  If you go into dBASE III, use a .DBF, delete records from there,
  1541.  pack it, and then go into Clipper and then append from that file,
  1542.  Clipper may add those deleted records.
  1543.  
  1544.  The above happens because after a PACK transaction, dBASE does
  1545.  not reset DOS's eof marker, and Clipper (which reads to DOS's eof)
  1546.  will add those "deleted/packed" records.  You can avoid this
  1547.  problem by:
  1548.  
  1549.  1 - doing ALL your file processing in Clipper, or
  1550.  
  1551.  2 - if you have to go into dBASE, then the minute you get
  1552.  back into Clipper, open the file and then close it before
  1553.  you do any type of transaction. This ensures that the
  1554.  DOS eof marker is reset to the real end-of-file.
  1555.  
  1556.  
  1557.  
  1558. PUBLISHED:  16 Dec 1986
  1559. MAIN_TOPICS:  @ ROW, COL SAY <EXP> GET <EXP>
  1560. TEXT:
  1561.  If a row greater than 24 is specified, no error message will
  1562.  be displayed.  Instead, the cursor will go to the bottom of
  1563.  the screen and the program will hang.
  1564.  
  1565.  
  1566. PUBLISHED:  16 Dec 1986
  1567. MAIN_TOPICS:  @ [EXPN],[EXPN] SAY [EXPC] PICT [PICT. LIST]
  1568. TEXT:
  1569.  A PICTURE clause that uses the 9 or # symbol but specifies no
  1570.  decimal position causes the decimal position of a numeric [exp]
  1571.  to be rounded. dBASE III instead truncates it.
  1572.  
  1573.  Example:
  1574.       x = 2.6
  1575.       @ 10,10 SAY x PICT "9"
  1576.  
  1577.   ********* Output ********
  1578.  
  1579.  
  1580.   dBASE III        CLIPPER
  1581.  
  1582.       2               3
  1583.  
  1584.